package com.li.templatemethodpattern.hookmethod;

/**
 * 模板基类
 *
 * @author lirenchun
 */
public abstract class HandleDrink {

    /**
     * 方法模板
     */
    public final void makeDrink() {
        //第一步
        prepareCup();
        //第二步骤
        readyDrink();
        //第三步骤
        pourInCup();
        //第四步骤
        if(hookHandle()) {
            sugaring();
        }
    }


    /**
     * 准备杯子
     */
    public void prepareCup() {
        System.out.println("准备杯子！");
    }

    /**
     * 抽象基本方法，各种饮料得到准备材料不同
     */
    protected abstract void readyDrink();

    /**
     * 倒入饮料
     */
    private void pourInCup() {
        System.out.println("将饮料倒入杯中");
    }


    /**
     * 加糖饮料
     */
    private void sugaring() {
        System.out.println("加糖");
    }

    /**
     * 加入钩子判断
     *
     * @return
     */
    public boolean hookHandle() {
        return true;
    }

}
